# 生成器
# 在Python中，这种一边循环一边计算的机制，称为生成器：generator

# 方法1：将列表生成式中的[]变成()
g = (x * x for x in range(1, 11))

# 通过next()方法获取下一个元素
next(g)

# 正确的打开方式
for n in g:
    print(n)

# 方法2： 函数中定义yield关键字
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
g1 = fib(6)

for x in g1:
    print('g1:',x)


# 练习
'''
打印杨辉三角形
# 期待输出:
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
# [1, 5, 10, 10, 5, 1]
# [1, 6, 15, 20, 15, 6, 1]
# [1, 7, 21, 35, 35, 21, 7, 1]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
'''
def triangles():
    L = [1]
    while True:
        yield l
        L = [sum(i) for i in zip([0]+L, L+[0])]

